#ifndef ARETE_H
#define ARETE_H

#include "noeud.h"



struct Arete
{
	Noeud** chemin; /* Tableau des Adresses des Noeuds parcourus */
	int longueur; /* Taille du tableau chemin
					 (vaut 0 s'il n'y a pas d'arête, 2 pour une vraie arête, plus pour une arête virtuelle) */
	int poids; 
};

typedef struct Arete Arete;



/* FONCTIONS D'INITIALISATION ET DE SUPPRESSION */

/* Crée une Arete ayant les paramètres chemin, longueur et poids */
Arete nouvelleArete(Noeud** chemin, int longueur, int poids);

/* Libère l'Arete a, qui ne doit plus être utilisée ensuite */
void testamentArete(Arete* a);



/* ACCESSEURS ET MUTATEURS */

/* Retourne l'adresse du i-eme Noeud du chemin de a (0<=i<a.longueur) */
Noeud* getCheminIArete(Arete* a, const int i);

/* Retourne la longueur de a */
int getLongueurArete(const Arete* a);

/* Retourne le poids de a */
int getPoidsArete(const Arete* a);

/* Définit n comme le i-eme Noeud du chemin de a (0<=i<a.longueur) */
void setCheminIArete(Arete* a, Noeud* n, const int i);

/* Définit longueur comme la longueur de a */
void setLongueurArete(Arete* a, const int longueur);

/* Définit poids comme le poids de a */
void setPoidsArete(Arete* a, const int poids);



/* AUTRES */

/* Retourne 1 si les Aretes a1 et a2 sont égales, 0 sinon */
int testEgalesAretes(const Arete* a1, const Arete* a2);

/* Affiche le contenu de l'Arete a dans la console */
void affichageAreteTexte(const Arete* a);



/* FONCTION DE TEST */

/* Teste les fonctions du module Arete
   Les affichages dans la console attestent du travail en cours
   Retourne 0 si le test est concluant */
int testArete();

#endif


